const db = require("../db");
const path = require("path");
// 定义 发布新文章 路由处理函数
const addArticle = (req, res) => {
    // console.log(req.user);
    // console.log(req.body);
    // console.log('-----------');
    // console.log(req.file); // 记录了上传的文件属性
    // 验证文件是否上传成功
    if (!req.file || req.file.fieldname !== 'cover_img') return res.cc('文件上传失败！');

    // 往formdata表单中追加数据
    req.body.pub_date = new Date();
    req.body.author_id = req.user.id;
    req.body.cover_img = path.join('/uploads', req.file.filename); // 这里需要在服务器中托管这个资源文件 以便于外界访问
    const sql = `insert into ev_articles set ?`;
    db.query(sql, req.body, (err, results) => {
        console.log(req.body);
        if (err) return res.cc(err);
        if (results.affectedRows !== 1) return res.cc('发布文章失败！');
        res.cc('发布文章成功！', 0);
    })
};
// 定义 获取文章列表 路由处理函数
const getArticleList = (req, res) => {
    const pagenum = req.query.pagenum;
    const pagesize = req.query.pagesize;
    let sql = 'select a.Id,title,pub_date,state,name as cate_name from ev_articles a left join ev_article_cate b on b.Id = a.cate_id where a.is_delete=0';
    if (req.query.cate_id && !req.query.state) { // 只传入参数cate_id
        console.log(1);
        sql = sql + ' and a.cate_id=?';
        const dt = req.query.cate_id;
        dbGetArtList(sql, pagenum, pagesize, dt);
    } else if (!req.query.cate_id && req.query.state) { // 只传入参数 state
        console.log(2);
        sql = sql + ' and a.state=?';
        const dt = req.query.state;
        dbGetArtList(sql, pagenum, pagesize, dt);
    } else if (req.query.cate_id && req.query.state) { // 两个参数都传
        console.log(3);
        sql = sql + ' and a.cate_id=? and a.state=?';
        const dt = [req.query.cate_id, req.query.state];
        dbGetArtList(sql, pagenum, pagesize, dt);
    } else if (!req.query.cate_id && !req.query.state) { // 两个参数都不传
        console.log(4);
        console.log('-------------------------');

        const dt = null;
        dbGetArtList(sql, pagenum, pagesize, dt);
    }
    // 定义从数据库获取数据的函数
    function dbGetArtList(sql, pagenum, pagesize, dt) {
        db.query(sql, dt, (err, results) => {
            if (err) return res.cc(err);
            // console.log(results);
            console.log(req.query);
            const total = results.length;
            // 数据分页
            const data = results.splice((pagenum - 1) * pagesize, pagesize);
            res.send({
                status: 0,
                message: '获取文章列表成功！',
                data: data,
                total,
            });
        })
    }
    // res.send('ok');
};
// 定义 根据Id删除文章数据 路由处理函数
const deleteArticle = (req, res) => {
    const sql = `update ev_articles set is_delete=1 where Id=?`;
    db.query(sql, req.params.id, (err, results) => {
        if (err) return res.cc(err);
        if (results.affectedRows !== 1) return res.cc('删除文章失败！');
        res.cc('删除成功！', 0);
    });
};
// 定义 根据Id获取文章 路由处理函数
const getArticleById = (req, res) => {
    const sql = `select * from ev_articles where Id=?`;
    db.query(sql, req.params.id, (err, results) => {
        if (err) return res.cc(err);
        // console.log(results);
        res.send({
            status: 0,
            message: '获取文章成功！',
            data: results
        })
    })
};
// 定义 根据Id更新文章信息 路由处理函数
const editArticleById = (req, res) => {
    // console.log(req.body);
    // console.log('-------');
    // console.log(req.file);
    // 手动验证cover_img 是否上传
    if (!req.file || req.file.fieldname !== 'cover_img') return res.cc('修改文章图片失败！');
    req.body.cover_img = path.join('/uploads', req.file.filename);
    const sql = `update ev_articles set ? where Id=?`;
    db.query(sql, [req.body, req.body.Id], (err, results) => {
        if (err) return res.cc(err);
        console.log(results);
        if (results.affectedRows !== 1) return res.cc('修改文章失败！');
        res.cc('修改文章成功！', 0);
    })

};

module.exports = {
    addArticle,
    getArticleList,
    deleteArticle,
    getArticleById,
    editArticleById
}